import { sleep } from "./index.js";
import puppeteer from "puppeteer";

/**
 * 根据分享的文件文件夹页面 +  指定的文件
 * 获取指定文件名的 单个下载页面
 * @param url 分享的文件文件夹页面
 * @param fileNames 指定需要的文件名(可以多个)
 * @return 单个下载页面地址
 */
export const getShareFilePages = async (url, fileNames) => {
  // 启动一个浏览器
  const browser = await puppeteer.launch({
    headless: "new",
    args: ["--no-sandbox"],
    // executablePath: "C:/Users/boringsoft/AppData/Local/Google/Chrome/Application/chrome.exe",
  });
  // 在浏览器上下文中，创建一个Page对象
  const page = await browser.newPage();
  await page.goto(url, {timeout: 0});

  const shareFilePage = await page.evaluate(
    ({ fileNames }) => {
      const list = document.querySelectorAll(".minPx-top");
      let downPageUrl = [];

      for (const it of list) {
        const item = it.querySelector(".filename").innerHTML;
        for (const fileName of fileNames) {
          if (item.indexOf(fileName) > -1) {
            downPageUrl.push(it.href);
            break;
          }
        }
      }
      return downPageUrl;
    },
    { fileNames }
  );
  await browser.close();
  return shareFilePage;
};

/**
 *
 * 根据分享单个下载页面
 * @param lanzouShareUrl 蓝奏云分享页地址
 * @returns 获取其真实下载地址
 */
export const getShareFileDownUrl = async (shareFilePage) => {
  // 启动一个浏览器
  const browser = await puppeteer.launch({
    headless: "new",
    args: ["--no-sandbox"],
    // executablePath: "C:/Users/boringsoft/AppData/Local/Google/Chrome/Application/chrome.exe",
  });
  // 在浏览器上下文中，创建一个Page对象
  const page = await browser.newPage();

  // Page对象加载一个网址
  await page.goto(shareFilePage, {timeout: 0});
  const iframeUrl = await page.evaluate(() => {
    const ifm = document.querySelector(".n_downlink");
    return ifm.src;
  });
  await page.goto(iframeUrl, {timeout: 0});
  await sleep(500);
  const downUrl = await page.evaluate(() => {
    const aDiv = document.querySelector(".load");
    const aButton = aDiv.querySelector("a");
    return aButton.href;
  });
  // 关闭浏览器释放Page
  await browser.close();
  return downUrl;
};


/**
 * getShareFileDownUrl_FromShareDirPage
 * 根据分享的文件夹 直接获取真实的下载连接（其实就是上两者的结合）
 * @param {*} url 
 * @param {*} fileNames 
 */
export const getSfduFromSdp = async (url, fileNames) => {
  const shareFilePages = await getShareFilePages(url, fileNames);
  const res = [];
  if(shareFilePages.length>0){
    for (const shareFilePage of shareFilePages) {
      const temp = await getShareFileDownUrl(shareFilePage);
      res.push({
        url: temp,
        header: 'accept-language:zh-CN,zh;q=0.9'
      });
    }
  }else{
    // 如果获取不到分享页列表，那可能是传入的连接为单个文件分享页
    const temp = await getShareFileDownUrl(url);
    res.push({
      url: temp,
      header: 'accept-language:zh-CN,zh;q=0.9'
    });
  }
  return res;
};
